<?php
namespace App\Http\Common;
use SimpleXMLElement;

/**
 * xml解析以及转化
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019-08-14
 * Time: 21:35
 */
class XmlTools{
    //创建静态私有的变量保存该类对象
     static private $instance;
     //参数
     private $config;
     //防止直接创建对象
     private function __construct($config){
         $this -> config = $config;
     }
      //防止克隆对象
     private function __clone(){
     }
     // 使用单列模式
     static public function getInstance($config=null){
         //判断$instance是否是Uni的对象
         //没有则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self($config);
        }
        return self::$instance;
    }

    /**
     * xml的解析
     * @param $simple
     * @return mixed
     * val 是值
     * index 是索引的数组
     */
    public function xmlpase($simple){
        $p = xml_parser_create();
        xml_parse_into_struct($p, $simple, $vals, $index);
        xml_parser_free($p);
        $res['val'] = $vals;
        $res['index'] = $vals;
        return $res;
    }

    /**
     * 将数组转化为xml文档
     * @param $arr 要转化为数组
     * @param int $dom
     * @param int $item
     * @return mixed
     */
    public function arrtoxml($arr, $node = 'include', $node1 = "menu")
    {
        if ($node == 'include') {
            $simpleXmlElemnet = new SimpleXMLElement('<?xml version="1.0" encoding="gbk"?><include></include>');
        } else {
            $simpleXmlElemnet = $node;
        }
        foreach ($arr as $k => $v) {
            if (is_array($v)) {
                if ($k === "@attributes") {
                    foreach ($v as $kk => $vv) {
                        $simpleXmlElemnet->addAttribute($kk, $vv);
                    }
                } else {
                    if (!is_numeric($k)) {//数字的就不用加进去
                        $this->arrtoxml($v, $simpleXmlElemnet, $k);//创建节点 并加在他的后面
                    } else {
                        $this->arrtoxml($v, $simpleXmlElemnet->addChild($node1), $k);//创建节点 并加在他的后面
                    }
                }
            } else {
                if (!is_numeric($k)) {
                    $simpleXmlElemnet->addChild('item', $v);
                } else {
                    $simpleXmlElemnet->addChild($k, $v);
                }
            }
        }
        return $simpleXmlElemnet;
    }

}
